package net.zjitc.controller;


import net.zjitc.pojp.CartItem;
import net.zjitc.pojp.Order;
import net.zjitc.pojp.Orderitem;
import net.zjitc.pojp.User;
import net.zjitc.service.CartService;
import net.zjitc.service.OrderService;
import net.zjitc.service.impl.CartServiceImpl;
import net.zjitc.service.impl.OrderServiceImpl;
import net.zjitc.utils.CommonUtils;
import net.zjitc.utils.dispacher.URLMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by Administrator on 2017/12/13.
 */
public class UserOrder {
    OrderService orderService=new OrderServiceImpl();
    CartService cartService=new CartServiceImpl();
    @URLMapping(url = "/creatOrder")
    public String creatOrder(HttpServletRequest request, HttpServletResponse response) {
        /**
         * 1.从session user
         * 2.生成一个订单对象 order(id,UUID，时间，收货人信息（默认收货信息，是当前用户），用户)
         * 3.订单根据购物车生成的(从数据库中查出购物车的信息cartlist)
         * 4.根据遍历cartlist购物车条目信息，生成订单条目（订单总价格total）
         * 5.订单条目是个集合，要把它放在订单下面
         * 6.把order订单插入数据库（事务）
         * 7.购物车清空
         * 8.order放到request域中，转发到订单页面
         */
        //1.从session user
        User user= (User) request.getSession().getAttribute("user");
        if(user==null){
            user.setUid(1);
            user.setAddr("工贸");
            user.setPhone("110");
        }
        //2.生成一个订单对象 order(id,UUID，时间，收货人信息（默认收货信息，是当前用户），用户)

        Order order=new Order();
        order.setOid(CommonUtils.getUUID());
        //默认收货信息为登录用户
        order.setAddr(user.getAddr());
        order.setPhone(user.getPhone());
        order.setName(user.getName());


        order.setState(0);
        //0未付款，1付款 但未发货， 2发货但未收货， 3收货交易完成
        order.setUser(user);
        //下单时间？？下单时间 字符串//写个放大，日期转字符串
        order.setOrdertime(CommonUtils.dateToString(new Date()));

        //3.订单根据购物车生成的(从数据库中查出购物车的信息cartlist)
        List<CartItem> _cartItemList=cartService.findByUid(user.getUid());
        //购物车为空时不生成

        if(_cartItemList==null){
            return "/WEB-INF/user/order.jsp";
        }

        // 4.根据遍历cartlist购物车条目信息，生成订单条目（订单总价格total）
        List<CartItem> _cartItem=cartService.findByUid(user.getUid());
        if(_cartItem!=null)
        {
            return "/WEB-INF/user/order.jsp";
        }

        List<Orderitem> orderitemList=new ArrayList<Orderitem>();//此集合用于存入订单条目
        double total=0.0;
        for (CartItem item:_cartItemList) {
            Orderitem orderItem=new Orderitem();
            orderItem.setOrder(order);
            orderItem.setProduct(item.getProduct());
            orderItem.setOsatate(0);//评价状态
            orderItem.setCount(item.getQuantity());//设置数量
            orderItem.setSubtotal(item.getProduct().getShop_price()*item.getQuantity());
            total=total+item.getProduct().getShop_price()*item.getQuantity();//计算总价
            orderitemList.add(orderItem);
        }


        //5. 订单条目是个集合，要把它放在订单下面

        order.setOrderitemList(orderitemList);
        order.setTotal(total);

        //把order订单插入数据库（事务service）
        int count = orderService.add(order);
        //* 7.此用户下的购物车清空
        //cartService.deleteByUid(user.getUid());
        //   * 8.order放到request域中，转发到订单页面
        request.setAttribute("order",order);
        return "/WEB-INF/user/order.jsp";



    }
}
